#pragma once
#ifndef UIComponent_hpp
#define UIComponent_hpp

#include"../AppComponent/AppBase.hpp"

namespace MMF
{
    /**
     * 界面组件主要类
     * 需要加载的界面需要集成重写本类，并实现其内部的函数
    */
    class UIComponentInterface
    {
        
    public:

        //构造函数
        //parentQWidget 为要传入的父级QT界面的QWidget指针，这里为了避免引入QT库使用的void*代替，内部转换一下即可
        UIComponentInterface(AppBase& app, void* parentQWidget);

        //虚析构用于释放内部的资源
        virtual ~UIComponentInterface() = 0;

        //模块中显示主函数的接口
        virtual void ShowMainWindow() = 0;
    };

    /***
    * 创建函数类型
    * 用于转换设备动态库中得函数，通过这个函数创建对应库中的UI组件
    * 这里被设计为函数指针
    */
    using UICreateFunc = UIComponentInterface* (*)(AppBase&, void*);

}


#endif
